<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>


    <script>
        //演示的是闭包函数
        // function a(a, b) {
        //     return a + b;
        // }


        // function fun(m, n, z) {
        //     return (m * n) + z

        // }

        // var result = fun(5, 6, a(3, 4))
        // console.log(result) //37


        //方式二：
        // 函数中再定义一个新的函数
        // function a() {
        //     var m = 10;

        //     function b() {
        //         var c = 20;
        //         return c;
        //     }
        //     return b;
        // }

        // var result_1 = a(); //返回的是b函数的引用
        // console.log(result_1())


        function say() {
            //局部变量.
            var i = 1;
            var sayName = function() { //闭包函数sayName
                i++;
                alert(i);
            }
            return sayName;
        }
        var result1 = say();
        result1(); //?
        result1(); //?

        //原来 在调用say函数的时候结束后应该局部变量释放，在内存中消失，但是，在该函数的内部有个闭包函数，需要调用到外部的局部变量i，而
        // 外部函数又将内部的函数的引用返回了出去，二者相互牵制，导致该变量不会被内存释放，在下次调用该say方法的时候，局部变量i不会被重新赋值，
        // 变相的提升了局部变量的生命周期，让其在内存中永存
    </script>
</body>

</html>